package com.heima.wemedia.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.heima.common.dtos.PageResult;
import com.heima.common.dtos.ResponseResult;
import com.heima.common.enums.AppHttpCodeEnum;
import com.heima.common.exception.LeadException;
import com.heima.model.admin.dtos.NewsAuthRequestDTO;
import com.heima.model.admin.dtos.NewsAuthResponseDTO;
import com.heima.model.media.dtos.WmNewsDto;
import com.heima.model.media.dtos.WmNewsPageReqDto;
import com.heima.model.user.dtos.AuthDTO;
import com.heima.wemedia.pojo.WmNews;
import com.heima.wemedia.service.WmNewsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author Fuqiang
 * @since :2023-03-26
 */
@Slf4j
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController {

    @Autowired
    WmNewsService newsService;

    /**
     * 根据提供的条件分页查询当前自媒体用户的自媒体文章列表
     *
     * @param dto
     * @return
     */
    @PostMapping("/page")
    public PageResult<WmNews> findByPage(@RequestBody WmNewsPageReqDto dto) {

        return newsService.findByPage(dto);
    }


    /**
     * 分页查询自媒体文章信息, 仅用于feign调用
     *
     * @param dto
     * @return
     */
    @PostMapping("/feign/page")
    public Page<NewsAuthResponseDTO> findByPageWithFeign(@RequestBody NewsAuthRequestDTO dto) {
        log.info("dto = {}", dto);
        return newsService.findByPageWithFeign(dto);
    }

    /**
     * 人工审核失败 feign调用
     *
     * @param dto
     */
    @PostMapping("/feign/auth_fail")
    public void authFail(@RequestBody AuthDTO dto) {
        newsService.authFail(dto);
    }

    /**
     * 人工审核成功 feign调用
     *
     * @param dto
     */
    @PostMapping("/feign/auth_pass")
    public void authPass(@RequestBody AuthDTO dto) {
        newsService.authPass(dto);
    }



    /**
     * 自媒体用户登录后，新增、修改、发布自媒体文章
     *
     * @param dto
     * @return
     */
    @PostMapping("/submit")
    public ResponseResult submit(@RequestBody WmNewsDto dto) {
        this.newsService.submit(dto);
        return ResponseResult.ok();
    }

    /**
     * 前台根据文章id查询自媒体文章详情
     *
     * @param id
     * @return
     */
    @GetMapping("/one/{id}")
    public ResponseResult<WmNews> getById(@PathVariable("id") String id) {
        return newsService.getByWmNewsId(id);
    }

    /**
     * 根据自媒体文章id查询自媒体文章人工审核信息 feign调用
     *
     * @param id 自媒体文章id
     * @return
     */
    @GetMapping("/feign/one/{id}")
    public NewsAuthResponseDTO findNewsAuthResponseDTOByWmNewsId(@PathVariable("id") Integer id) {
        return newsService.findNewsAuthResponseDTOByWmNewsId(id);
    }

    /**
     * 删除自媒体文章，如果已经通过审核发布的文章不能删除
     */
    @DeleteMapping("/del_news/{id}")
    public ResponseResult deleteById(@PathVariable Integer id) {
        try {
            newsService.deleteById(id);
            return ResponseResult.ok();
        } catch (Exception e) {
            throw new LeadException(AppHttpCodeEnum.DATA_CAN_NOT_DEL_ENABLE);
        }
    }



    /**
     * 自媒体文章上下架,发送kafka消息通知其他微服务
     *
     * @param dto
     * @return
     */
    @PutMapping("/down_or_up")
    public ResponseResult downOrUp(@RequestBody WmNewsDto dto) {
        newsService.downOrUp(dto);
        return ResponseResult.ok();
    }
}
